// 导入模块|依赖|框架
const express = require('express')
const cors = require('cors')
const bodyParser = require('body-parser')
const path = require('path')
// 创建程序
const app = express()
// web服务（HTTP服务） 登录、注册、添加好友用的就是这个5000这个端口的服务（环境）
const PORT = 5000;
app.listen(PORT,()=>{
    console.log("服务启动了...")
})
//静态资源
app.use(express.static(path.join(__dirname,'public')))
//设置资源跨域共享
app.use(cors())
// 解析post请求
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// 导入路由对象
app.use('/api/user',require("./router/users"))
app.use('/api/message',require("./router/messages"))
app.use('/api/friend',require("./router/friends"))


// 用于聊天的业务逻辑
const { createServer } = require('http');
const { Server } = require("socket.io");
// 创建服务 websocket 服务（通信协议） 用于即时聊天的
const httpServer = createServer(app)
// 创建通信服务并且设置资源跨域共享
const io = new Server(httpServer, {
    // 允许跨域
    cors: {
        origin: "*"
    }
})
// 导入消息模块
const Message = require('./models/messageModel')
const messageModel = new Message()
// 通讯录模块
const Friend = require('./models/friendsModel')
const friendsModel = new Friend()
// 网络通信连接
io.on('connection', (socket)=>{
    // 1) 加入聊天
    socket.on('join', async (user_id,friend_id)=>{
        console.log("加入聊天...")
        // console.log(user_id,friend_id)
        // await friendsModel.is_friend(user_id,friend_id)
        // .then(
        //     content=> {
        //         console.log("加入聊天...",content)
        //     }
        // )
    })

    // 2） 监听信息收发
    socket.on('message', async (data)=> {
        // console.log("聊天过程中...",data)
        // sender_id, receiver_id, message_content
        let { sender_id, receiver_id, message_content} = data;
        // 判断两用户是否为好友关系
        await friendsModel.is_friend(sender_id, receiver_id)
        .then(
           async content=> {
                // console.log("聊天...",content)
                if(content.code == 200) {
                    // 聊天内容会经过这个位置...
                    // 记录聊天的信息
                    await messageModel.add(sender_id, receiver_id, message_content)
                    // 发送给客户端
                    // console.log(data);
                    // 广播消息
                    socket.broadcast.emit('sendMsg',data);
                }
            }
        )
        // // 发送给客户端
        // // 广播消息
        // socket.broadcast.emit('sendMsg',data);
    })

    // 3）退出聊天
    socket.on('disconnecting',()=>{
        // console.log("退出聊天...")
    })

})
// 设置服务端口
httpServer.listen(3005);


